package com.bowen.seckill.scheduled;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.concurrent.CompletableFuture;

/**
 * 定时任务
 * 1.@EnableScheduling： 开启定时任务
 * 2.@Scheduled springboot的(开启一个定时任务)
 * 3.自动配置类
 *
 * 异步任务
 *  1.@EnableAsync 开启异步任务功能
 *  2.@Async 给希望异步执行的方法上标注注解
 *  3.自动配置类：TaskExecutionAutoConfiguration
 *
 */
@Slf4j
@Component
@EnableAsync
@EnableScheduling
public class HelloSchedule {

    /**
     *1.spring中6位组成，不容许弟7位的年
     * 2.在周见的位置，1-7代表周一到周日
     * 3.定时任务不应该阻塞。(不应出现超长的定时任务)。默认是阻塞的
     *      1.可以让业务运行以异步的方式，自己提交到到线程池
     *      //        CompletableFuture.runAsync(()->{
     *      //            xxxService.hello();
     *      //        },executor);
     *      2.（分版本，不咋好使）支持定时任务线程池，设置 ThreadPoolTaskScheduler (这个类读取配置文件中spring.task.scheduling.pool.size=5)
            3.让定时任务异步执行
                异步任务；


     解决： 使用异步+定时任务完成定时任务不阻塞的功能
     */
    @Async
    @Scheduled(cron = "* * * ? * 7")
    public void hello() throws InterruptedException {
        log.info("hello...");
        Thread.sleep(3000);

    }
}
